/*
 * Timer.h 主控制程序中的计时功能
 */

#ifndef HEAD_TIMER_H_
#define HEAD_TIMER_H_
#include "driverlib\MSP430F5xx_6xx\driverlib.h"
#include <string.h>

/*
 * 时钟模块定义
 */
#define MAIN_TIMER_BASE     TIMER_A0_BASE
#define MAIN_TIMER_CCR      TIMER_A_CAPTURECOMPARE_REGISTER_0

/*
 * 秒表结构体
 */
typedef struct {
    uint16_t timer;     //TimerS：存放着当前时间；其他：存放着响应时间点
    uint16_t seconds;   //TimerS：不使用；其他：存放着计时时长
    uint8_t flag;       //TimerS：不使用；其他：存放着一些标志位，如下宏定义所示
}strSecondChronograph;
#define TIMER_STR_SECOND_CHRON_FLAG_OVERFLOW    0x01//是否溢出标志位，1为溢出
#define TIMER_STR_SECOND_CHRON_FLAG_RUNING      0x02//是否开启了该秒表，1为开启

/*
 * 秒表变量
 */
strSecondChronograph TimerS;                    //主时钟，每秒增加1
strSecondChronograph TimerEleLock;              //电磁锁开启计时，记录着关闭电磁锁的那一秒
strSecondChronograph TimerInfoSend;             //定时发送信息的计时，记录着下一次发送信息的那一秒
strSecondChronograph TimerVbatCheck;            //定时检查电源电压vbat，记录着下一次检查电源电压的那一秒
strSecondChronograph TimerLowPowMode;           //省电模式的计时
strSecondChronograph TimerATGM336AntennaCheck;  //4G模块天线状态检查
strSecondChronograph TimerATGM336Led;           //4G模块LED状态灯

/*
 * @brief  初始化主程序的计时器
 * @param  无
 * @retval 无*/
void Timer_InitTimer();

/*
 * @brief  开始一个计时
 * @param  strSC：秒表变量标志
 *         seconds：计时时间，单位秒
 * @retval 无*/
void Timer_startTiming(strSecondChronograph *strSC,uint16_t seconds);

/*
 * @brief  关闭一个计时
 * @param  strSC：秒表变量标志
 * @retval 无*/
void Timer_closeTiming(strSecondChronograph *strSC);

/*
 * @brief  检查计时
 * @param  strSC：秒表变量标志
 * @retval 如果到达计时时间，则返回1*/
uint8_t Timer_checkoutTiming(strSecondChronograph *strSC);

#endif /* HEAD_TIMER_H_ */
